import { ScrollView, View } from "@tarojs/components";
import BannerIcon from "@/assets/images/b1.png";
import { Image, Button, Checkbox, Toast, Dialog } from "@taroify/core";
import Taro, { useDidShow } from "@tarojs/taro";
import { useEffect, useRef, useState } from "react";
import { requestPOST } from "@/request";
import { useDispatch } from "react-redux";
import { setUserInfo } from "@/store/reducers/userInfo";
import { setActive } from "@/store/reducers/tabbar";
import { getCurrentInstance } from "@tarojs/taro";

export default function Login() {
  const dispatch = useDispatch();
  const [read, setRead] = useState(false);
  const [open, setOpen] = useState(false);
  const wxCode = useRef<any>("");
  const wxOpenId = useRef<any>("");
  const wxPhone = useRef<any>("");

  const handleGetPhoneNumber = (e: any) => {
    // requestPOST("other/wxLogin", {
    //   // phone: "18922958416",
    //   // openId: "otHHX5RfMczd9aO9U7fQy3lgnrJU",
    //   phone: "15347401791", 
    //   openId: "olZ9Nvv5s4WhFRcJRXR0M5noBUnY",
    //   code: '0f3wLtll2vp5jg4ZBKnl2WRlYi4wLtl5',
    // }).then((res: any) => {
    //   Taro.setStorageSync("token", res.token);
    //   Taro.setStorageSync("userInfo", res);
    //   dispatch(setUserInfo(res));
    //   dispatch(setActive(0));
    //   Taro.switchTab({ url: "/pages/home/index" });
    // });

    const { iv, encryptedData, errMsg } = e.detail;
    try {
      if (!wxCode) {
        Toast.open("code为空");
        return;
      }
      if (errMsg.includes("ok")) {
        Taro.showLoading({
          title: "正在登录...",
        });
        requestPOST(`other/getOpenIdByCode/${wxCode.current}`).then(
          (res: any) => {
            const { openid, session_key } = res;
            wxOpenId.current = openid;
            requestPOST("other/getWxPhoneDecrypt", {
              iv,
              encryptedData,
              sessionKey: session_key,
            }).then((res1: any) => {
              wxPhone.current = res1.purePhoneNumber;
              wxLogin();
            });
          }
        );
      }
    } catch (e) {
      Taro.hideLoading();
      Toast.open({ message: e, type: "text" });
      console.error(e);
    }
  };

  const wxLogin = () => {
    Taro.login({
      success({ code }) {
        requestPOST("other/wxLogin", {
          phone: wxPhone.current,
          openId: wxOpenId.current,
          bindMerchantId: userId.current || "",
          userType: userType.current || "",
          code: code,
        })
          .then((res: any) => {
            Taro.setStorageSync("token", res.token);
            Taro.setStorageSync("userInfo", res);
            dispatch(setUserInfo(res));
            dispatch(setActive(0));
            Taro.switchTab({ url: "/pages/home/index" });
          })
          .catch((e) => {
            if (e.code !== 500) {
              Taro.navigateTo({
                url: `/packages/register/index?phone=${wxPhone.current}&openid=${wxOpenId.current}`,
              });
            }
          })
          .finally(() => {
            Taro.hideLoading();
            Taro.login({
              success({ code }) {
                wxCode.current = code;
              },
            });
          });
      },
    });
  };

  const userId = useRef(0);
  const userType = useRef(0);
  useEffect(() => {
    Taro.login({
      success({ code }) {
        wxCode.current = code;
      },
    });

    const instance = getCurrentInstance();
    const scen = instance.router?.params?.scene;
    if (scen) {
      let url = decodeURIComponent(scen);
      if (url.indexOf("userId1") === -1) {
        // userId1表示员工 userId表示普通用户
        userType.current = 1;
      } else {
        userType.current = 2;
      }
      userId.current = Number(decodeURIComponent(scen).split("=")[1]);
    } else {
      userId.current = Number(instance.router?.params.userId);
    }
  }, []);

  const handleRead = () => {
    setOpen(false);
    setRead(true);
  };

  return (
    <View style={{ background: "#e8f7fe", height: "100vh" }}>
      <Image src={BannerIcon} width="100%" height={571} mode="widthFix" />
      <View style={{ marginTop: "240rpx", padding: "0 72rpx" }}>
        <Button
          color="primary"
          block
          openType="getPhoneNumber"
          onGetPhoneNumber={handleGetPhoneNumber}
          disabled={!read}
        >
          手机号一键登录
        </Button>
        <View
          style={{
            fontSize: "22rpx",
            display: "flex",
            marginTop: "40rpx",
            justifyContent: "center",
          }}
        >
          <Checkbox
            checked={read}
            onChange={setRead}
            shape="square"
            size={13}
          ></Checkbox>
          <View style={{ color: "#aaa", marginLeft: "10rpx" }}>已阅读</View>
          <View onClick={() => setOpen(true)} style={{ color: "#00A2FF" }}>
            相关隐性条款和政策
          </View>
        </View>
      </View>

      <Dialog
        open={open}
        onClose={setOpen}
        backdrop={{ style: { zIndex: 10000 } }}
        style={{ zIndex: 10001 }}
      >
        <Dialog.Header></Dialog.Header>
        <Dialog.Content>
          <ScrollView style={{ height: "60vh" }} scrollY>
            <View style={{ textAlign: "left" }}>
              <View>
                请您在使用/继续使用信怡电器商城小程序前仔细阅读、充分理解全文，并在同意全部内容后使用/继续使用。除非另有说明，不同意《信怡电器商城小程序隐私政策》或其更新（我们将及时通知您此类更新）可能会影响您正常使用或继续正常使用我们的产品和/或服务。
                导言：
              </View>
              <View>
                （1）信怡电器商城小程序为您提供的产品和服务，如果您对本隐私政策或相关问题有任何疑问或顾虑请与我们联系。
              </View>
              <View>
                （2）本隐私政策适用于我们通过信怡电器商城小程序向您提供的各项完整功能产品和服务，按照中国相关的法律、法规、标准制定，旨在向您说明我们如何收集、使用、存储、传输、公开与保护个人信息，以及我们为您提供的访问、更新、删除和保护这些信息的方式。
              </View>
              <View>
                请您注意，本隐私政策不适用于信怡电器商城小程序产品和/或服务集成的任何第三方应用程序或软件，或者任何其他第三方产品、服务或业务（统称“第三方服务”）。第三方服务由第三方负责运营，您使用第三方服务应遵守第三方为此制定的隐私政策或其他个人信息处理规则，我们提示您仔细识别实际服务的提供方，并在使用任何第三方服务之前仔细查看相关规则。
              </View>
              <View>
                （3）针对涉及与您的权益（可能）存在重大关系的条款以及涉及敏感个人信息（定义见附录）的处理，我们在本政策中将采用粗体、下划线或其他合理方式提示您重点阅读。
              </View>
              <View>
                （4）您同意本隐私政策表示您已经了解并同意在相关场景下，为实现功能运行，我们将对您的相关个人信息进行处理。但这并不代表只要您开始使用我们的产品与/或服务，我们将处理本隐私政策中涉及的全部个人信息。仅当您使用特定功能时，我们才会根据“最小必要”原则，为实现向您提供服务的目的，处理您的相关个人信息。
              </View>
              <View>
                （5）除本隐私政策外，在特定场景下，我们将以及时告知的方式（包括但不限于更新本隐私政策、重新签署文件、页面提示、弹窗、站内信、网站公告或其他便于您获知的方式）另行向您详细说明对应信息的处理目的、方式、范围等规则，并在征得您的授权同意后处理。
              </View>
            </View>
          </ScrollView>
        </Dialog.Content>
        <Dialog.Actions>
          <Button onClick={() => handleRead()}>我已阅读</Button>
        </Dialog.Actions>
      </Dialog>
    </View>
  );
}
